#__*__coeding:utf-8__*__
#!/usr/share/python
'''
---------------------------------------------------------------- 
 版权所有。  
 
 文件名：
 文件功能描述： 
 author：
 时间：
--------------------------------------------------------------- 
'''


from DB.settingdb import Setting
from logdispose.logfiledispose import log_dispose
from logdispose.logdisposeserver import LogDispoesServer
from flask import Flask
import time
log=Flask(__name__)

class LogDisposeContrll:
    NOEDAY = 1#86400  # 常量一天的秒数

    def __init__(self):
        #获取设置内容的最后一条，程序中以设置中最后一条数据结果为导向
        self.logobj=log_dispose()
        GetSetting_Obj=Setting(None,None,None)
        self.strategy_date = GetSetting_Obj.get_setting_limit()
        if self.strategy_date[1] != None:
            self.perform_number=self.strategy_date[3]






    def DispoesFileList(self):
        '''
        根据设置或许需要处理文件数量的文件名列表
        :return: 文件名列表 《属性：列表》
        '''
        file_lists=self.logobj.need_date(self.logobj.get_filename_alllist())
        if file_lists != None:
            DispoesFileList=[]
            try:
                if self.perform_number >= 0:
                    if file_lists != None:
                        for j in file_lists:
                            if file_lists.index(j) < self.perform_number:
                                DispoesFileList.append(j)
                            else:
                                continue
                return DispoesFileList
            except:
                return None


    def Logdispose(self,frequency, *args):
        filenumber=0
        if len(args)>=1:
            for i in args[0]:
                LogDispoesServerobj=LogDispoesServer(i)
                result=LogDispoesServerobj.InsertDateAll()
                if type(result) != tuple:
                    log.logger.critical(result)
                    time.sleep(self.NOEDAY/2)
                filenumber += 1
            log.logger.critical('本次执行是程序启动以来第%d次任务，共计处理%s个文件,距离下次任务时间%s' % (frequency, filenumber, self.DelayTime()))
            time.sleep(self.DelayTime())
        else:
            log.logger.critical('未添加设置数据或日志文件目录配置错误，本次任务完成。离下次文件处理时间还有%s秒。本次执行是程序启动以来第%d次。' % (self.DelayTime(), frequency))
            time.sleep(self.DelayTime())


    def LogDisposeTask (self):
        sleeptime=self.DelayTime()
        frequency=0
        while True:
            frequency += 1
            if self.DispoesFileList() != None:
                self.Logdispose(frequency,self.DispoesFileList())
            else:
                if frequency<4:
                    log.logger.critical('文件列表为空，没有文件处理。等待%s秒后进入下一次任务。本次执行是程序启动以来第%d次。' % (self.DelayTime(), frequency))
                    time.sleep(self.DelayTime())
                else:
                    time.sleep(self.NOEDAY/2)

    def DelayTime(self):
        cycle=self.strategy_date[1]
        timenow=time.time()
        proesstime=self.proesstime()
        if cycle<1:     #如果设置的周期时间小于1
            if proesstime<=timenow:
                return 0
            else:
                return proesstime-timenow  #再比最终较执行时间小于或等于当前时间返回0，如果不是，则用执行时间减去现在时间得出需要延迟的时间并返回
        else:
            return (proesstime+(cycle*self.NOEDAY))-timenow  #如果设置周期大于1，则当前最近执行时间+周期数*常量（一天的秒数）-当前时间=最总需要延迟时间

    def proesstime(self):
        nowdate = time.localtime(time.time())   #获取当前时间并转换成格林时间
        time1 = time.strftime('%Y-%m-%d ', nowdate)     #转换时间去保留年月日
        time2 = str(time1) + str(self.strategy_date[2])     #把转换后保留年月日的时间格式化成字符串并拼接格式化成字符串的从数据库获取设置执行的时间
        timer = time.strptime(time2, '%Y-%m-%d %H:%M:%S')   #再把拼接号的字符串日期转换成格林时间
        proesstimer = time.mktime(timer)    #最后转换成时间戳方便后续方法计算（最近执行时间）
        return proesstimer

    def TimeToBreakUp(self):
        timer=self.strategy_date[2]
        timestr=str(timer)
        timestelist=timestr.split(':')
        return timestelist[0],timestelist[1]

